package TemplatePattern.demo;

/**
 * @author： pang-yun
 * @date： 2021-12-30 20:35
 * 功能目的 ：用于  带有模板的固定类
 */

//抽象类 表示豆浆
public abstract class SoyBeanMilk {
    // 模板方法，  可以做成 final  不能被子类去覆盖
    final void make() {
        select();
        if (isNeed()) {
            addCondiments();
        }
        soak();
        beat();
    }
    // 钩子方法  用于子类控制父类流程    如果想改变 父类执行流程 可以在子类中重写 返回 false
    boolean isNeed() {
        return true;
    }

    //选材料
    void select() {
        System.out.println("第一步: 选择好新鲜的黄豆");
    }

    // 添加不同配料 抽象方法 子类具体实现
    abstract void addCondiments();

    //浸泡
    void soak() {
        System.out.println("第三步: 黄豆和配料开始浸泡，需要三个小时");
    }

    void beat() {
        System.out.println("黄豆和配料放到豆浆中");
    }


}
